package com.axzhengxin.platform.axcube.transf;

import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.Data;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * EntInfoListQueryRequest
 * 安信魔方请求报文实体类
 *
 * @author jiangnan
 * @date 2021/3/18
 */
@Data
public class EntInfoListQueryRequest {

    /**
     * 企业名称
     */
    private String content;
    /**
     * 查询类型
     */
    private String searchType;
    /**
     * 注册资本
     */
    private String regcap;
    /**
     * 注册时间
     */
    private String estDate;
    /**
     * 企业状态
     */
    private String entState;
    /**
     * 国标大类
     */
    private String entType;
    /**
     * 国标小类
     */
    private String entDetailType;
    /**
     * 热门城市
     */
    private String areaName;

    /**
     * 判断请求报文是否带有有效查询参数
     * 判断条件为至少有一个字段值不为空
     *
     * @return 判断结果
     */
    public boolean isValidRequest() {
        return Stream.of(ReflectUtil.getFields(EntInfoListQueryRequest.class))
                .filter(Objects::nonNull)
                .map(f -> ReflectUtil.getFieldValue(this, f))
                .map(String::valueOf)
                .anyMatch(StrUtil::isNotEmpty);
    }

    /**
     * 生成查询过滤条件集合
     *
     * @return 过滤条件集合
     */
    public List<ElasticSearchAgentRequest.QueryFilter> initQueryFilter() {
        return Stream.of(ReflectUtil.getFields(EntInfoListQueryRequest.class))
                .filter(Objects::nonNull)
                .filter(f -> !"content".equalsIgnoreCase(f.getName()))
                .filter(f -> !"searchType".equalsIgnoreCase(f.getName()))
                .map(f -> new ElasticSearchAgentRequest.QueryFilter()
                        .setFilterKey(f.getName())
                        .setFilterValue(String.valueOf(ReflectUtil.getFieldValue(this, f))))
                .collect(Collectors.toList());
    }

}
